package cockpit.test;

import static org.junit.Assert.*;

import java.sql.SQLException;

import org.junit.Test;

import cockpit.comm.DTO.DatosException;
import cockpit.desarrollo.SERVICE.UsuarioSERVICE;

public class testUsuario
{

    public void crearEscenario( ) throws DatosException, SQLException
    {
        String email = "email";
        System.out.println( UsuarioSERVICE.getUsersEmail( email ) );
    }
    @Test
    public void test( )
    {

    }

    @Test
    public void testMuchasConsultas( ) throws DatosException, SQLException
    {
        String email = "emailtest";
        String email1 = "emailtest 1";
        String email2 = "emailtest 2";
        String email3 = "emailtest 3";

        UsuarioSERVICE.eliminarUsuario( email );
        UsuarioSERVICE.createBasicUSer( email, "Password" );
        System.out.println( "creo un usuariobasico" );

        UsuarioSERVICE.eliminarUsuario( email1 );
        UsuarioSERVICE.createBasicUSer( email1, "Password" );
        System.out.println( "creo un usuariobasico" );

        UsuarioSERVICE.eliminarUsuario( email2 );
        UsuarioSERVICE.createBasicUSer( email2, "Password" );
        System.out.println( "creo un usuariobasico" );

        UsuarioSERVICE.eliminarUsuario( email3 );
        UsuarioSERVICE.createBasicUSer( email3, "Password" );
        System.out.println( "creo un usuariobasico" );

        for( int i = 0; i < 2; i++ )
        {

            System.out.println( UsuarioSERVICE.getUsersEmailLike( email ) );

        }

    }

    @Test
    public void testCrearUsuario( ) throws DatosException, SQLException
    {
        String email = "emailppppp";
        UsuarioSERVICE.eliminarUsuario( email );
        UsuarioSERVICE.createBasicUSer( email, "Password" );
        System.out.println( "creo un usuariobasico" );
        UsuarioSERVICE.getUsersEmail( email );
        assertTrue( UsuarioSERVICE.getUsersEmail( email ).size( ) == 1 );
        UsuarioSERVICE.eliminarUsuario( email );
        assertTrue( UsuarioSERVICE.getUsersEmail( email ).size( ) == 0 );
    }
    @Test
    public void testCargaCrearUsuarios( )
    {
        try
        {
            crearEscenario( );
            for( int i = 0; i < 500; i++ )
            {
                System.out.println( "creando hilo " + i );
                new ThreadCrearUsuario( "ss" + i + "ko" + i, "k" ).start( );
                System.out.println( "hilo creado " + i );
            }

        }
        catch( DatosException e )
        {
            // TODO Auto-generated catch block
            e.printStackTrace( );
            System.out.println( e );
            assertTrue( false );
        }
        catch( SQLException e )
        {
            // TODO Auto-generated catch block
            e.printStackTrace( );
            System.out.println( e );
            assertTrue( false );
        }
        assertTrue( true );

    }

}

class ThreadCrearUsuario extends Thread
{

    String nombreini;
    String pass;

    public ThreadCrearUsuario( String mail, String pass )
    {
        this.nombreini = mail;
        this.pass = pass;
    }
    public void run( )
    {

        System.out.println( getName( )+' ');

        
        try
        {
            System.out.println( getName( )+' '+"Creando usuario usuario" );
            UsuarioSERVICE.createBasicUSer( nombreini , pass  );            
            System.out.println( getName( )+' '+"usuario creado" );
            
            System.out.println( getName( )+' '+"eliminando usuario usuario" );
            UsuarioSERVICE.eliminarUsuario( nombreini );
            System.out.println( getName( )+' '+"usuario eliminado" );
        }
        catch( DatosException e )
        {
            System.out.println( "error" );
            e.printStackTrace( );
        }
        catch( SQLException e )
        {
            System.out.println( "error" );
            e.printStackTrace( );
        }

        System.out.println( "Termina thread " + getName( ) );
    }
}